iT邦幫忙

2026 iThome 鐵人賽

DAY 4
0
自我挑戰組

學習C#續系列 第 4

Day 4: C# 複習-4(System.IO 檔案與資料流處理)

  • 分享至 

  • xImage
  •  

一、System.IO 基礎檔案與資料夾操作
提供快速、一次性處理檔案與目錄的靜態工具類別:

  • File 類別(負責單一檔案的建立、檢查與讀寫):
    • File.Exists(path):檢查檔案是否存在。
    • File.Create(path):建立新檔案。
    • File.WriteAllText(path, content):建立檔案並寫入文字(若檔案已存在則覆蓋)。
    • File.ReadAllText(path):一次性讀取檔案中的所有文字內容。
  • Directory 類別(負責資料夾/目錄的管理):
    • Directory.Exists(path):檢查資料夾是否存在。
    • Directory.CreateDirectory(path):建立資料夾(若已存在則不重複建立)。
    • Directory.GetFiles(path):取得資料夾內所有檔案路徑清單。
    • Directory.GetDirectories(path):取得資料夾內所有子資料夾路徑清單。

File 與 Directory 基礎範例
https://ithelp.ithome.com.tw/upload/images/20260917/201789256CuahmjQpM.png


二、文字串流(Stream):StreamWriter 與 StreamReader
串流(Stream)如同資料流動的水管,分為從檔案讀入程式的「輸入串流」與從程式寫入檔案的「輸出串流」。適合用於逐行處理或處理較大型的 .txt 文字檔。

  1. StreamWriter(寫入文字檔)
  • 特色:可逐行寫入,搭配 using 語句可在結束時自動關閉串流並釋放資源,避免檔案被鎖住。
  • 追加模式(Append):
    • new StreamWriter(path) 或 new StreamWriter(path, false):覆蓋舊檔案內容(預設)。
    • new StreamWriter(path, true):追加模式,在原內容末尾繼續寫入。
  • 常用方法:
    • Write():寫入文字(不換行)。
    • WriteLine():寫入文字並自動換行。
    • Flush():強制將緩衝區資料寫入磁碟(using 會自動處理)。
    • Close():關閉串流(using 會自動處理)。
  1. StreamReader(讀取文字檔)
  • 特色:可逐行串流讀取,非常節省記憶體,特別適合讀取大檔案。
  • 常用方法:
    • ReadLine():一次讀取一行文字。
    • ReadToEnd():一次性讀取自當前位置至檔案末尾的所有文字。
    • Peek():預覽下一個字元是否存在(若到達結尾會回傳 -1)。

補充(檔案路徑):
若使用相對路徑,檔案預設會建立在專案的執行目錄(例如 bin\Debug 或 bin\Debug\netX.X)。可透過 Path.GetFullPath(filePath) 取得並印出實體完整路徑。

StreamWriter 與 StreamReader(文字串流讀寫)範例
https://ithelp.ithome.com.tw/upload/images/20260917/20178925wnWlzmeJYD.png


三、二進位檔案處理:BinaryWriter 與 BinaryReader

  1. 文字檔 vs 二進位檔
  • 文字檔案 (Text File):以字元編碼(如 UTF-8)儲存,人類可直接用記事本開啟閱讀。
  • 二進位檔案 (Binary File):以底層原始二進位 bytes 儲存(例如整數 123 存為 7B 00 00 00 佔 4 bytes,而非字串 "123")。用記事本開啟會顯示亂碼,適合圖片、音訊、遊戲存檔與數值資料。
  1. 核心操作與重要規則
  • BinaryWriter:呼叫 Write(...) 方法直接寫入特定型別(如 int、double、bool、string)。
  • BinaryReader:提供對應型別的讀取方法,例如 ReadInt32()、ReadDouble()、ReadBoolean()、ReadString()。
  • 最關鍵規則:
    • 讀取順序必須與寫入順序完全一致。
    • 例如:寫入順序為 int -> double -> bool -> string,讀取時就必須依序呼叫 ReadInt32() -> ReadDouble() -> ReadBoolean() -> ReadString(),否則解析的位元組會錯位導致數值錯誤或拋出異常。

BinaryWriter 與 BinaryReader(二進位檔案讀寫)範例
https://ithelp.ithome.com.tw/upload/images/20260917/20178925px51qIDam0.png


上一篇
Day 3: C# 複習-3(錯誤處理、命名空間、類別與物件、建構子)
下一篇
Day 5: 繼承機制(Inheritance)
系列文
學習C#續8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言